package com.cskaoyan.day3._01_review;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author Common-zhou
 * @since 2023-03-01 10:03
 */
public class Demo2 {
    public static void main(String[] args) {

        //testAdd();
        //
        //testRemove();
        //
        //testAsList();

        //testSet();

        //testListFori();

        //testIndexOf();

        testAsList2();
    }

    private static void testAsList2() {
        List<String> list = Arrays.asList("zs", "ls", "wu");

        System.out.println(list);
        System.out.println(list.getClass());


        // 之前我们都是使用List<String> 接。所以每一次都跳到List接口那里了
        ArrayList<Object> objects = new ArrayList<>();
        objects.add("zs");

        List<String> list1 = new ArrayList<>();
        list1.add("");

        // 底层的数组 及 扩容机制


    }

    private static void testIndexOf() {
        //    int indexOf(Object o)： 获取元素的首个index
        //    int lastIndexOf(Object o)： 获取元素的最后一个index

        List<String> list = new ArrayList<>();
        list.add("coco");  // 0
        list.add("茶颜悦色"); // 1
        list.add("茶百道"); // 2
        list.add("茶颜悦色"); // 3
        list.add("一点点"); // 4
        list.add("茶颜悦色"); // 5

        // 返回的是下标；第一个出现的元素的下标
        // 去找  茶颜悦色  的 第一个出现的下标
        int index = list.indexOf("茶颜悦色");
        System.out.println(index);

        // 最后一次的下标位置
        int index1 = list.lastIndexOf("茶颜悦色");
        System.out.println(index1);

        // 不存在的时候返回-1
        int index2 = list.indexOf("古茗");
        System.out.println(index2);


    }

    /**
     * 相对于  Collection List多了一种遍历方式
     * fori
     * 因为有了 get(index)
     */
    private static void testListFori() {
        List<String> list = new ArrayList<>();
        list.add("coco");
        list.add("茶颜悦色");
        list.add("茶百道");
        list.add("一点点");

        for (int i = 0; i < list.size(); i++) {
            String s = list.get(i);
            System.out.println(s);
        }

    }

    private static void testSet() {
        //    E set(int index, E element)： 设置指定下标的元素为element
        //    E get(int index)： 获取指定下标元素

        List<String> list = new ArrayList<>();
        list.add("coco");
        list.add("茶颜悦色");
        list.add("茶百道");
        list.add("一点点");

        System.out.println(list);

        list.set(0, "蜜雪冰城");

        System.out.println(list);

        String s = list.get(0);
        System.out.println(s);
        System.out.println(list.get(1));


    }

    private static void testAsList() {
        // 帮我们初始化数据的
        List<Integer> list = Arrays.asList(1, 2, 3);
        System.out.println(list);
        System.out.println(list.getClass());


        // Arrays.asList() 生成的List。不能操作。
        // UnsupportedOperationException
        //list.add(10);

        //list.remove(1);

        //List<Integer> list1 = new ArrayList<>();
        //list1.addAll(list);


    }

    private static void testRemove() {
        //    E remove(int index)：删除指定下标的元素，只能删除下标的位置[0, lenth-1]。返回的是删除的元素

        // Arrays.asList()
        List<String> collection = new ArrayList<>();

        collection.add("zs");
        collection.add("ls");
        collection.add("wu");

        // zs   ls    wu
        // 0     1    2
        collection.remove(0);
        System.out.println(collection);


    }

    private static void testAdd() {
        //    void add(int index, E element)： 在指定位置添加元素。list添加的位置，只能在[0,length之间]
        //    boolean addAll(int index, Collection<? extends E> c)： 在指定位置添加一个Collection的所有元素


        //List<String> collection = new ArrayList<>();
        //List<String> collection = new LinkedList<>();
        //collection.add()

        //LinkedList<String> arrayList = new LinkedList<>();
        //arrayList.add("zs");
        //arrayList.add("ls");
        //arrayList.trimToSize();

        // 面向接口编程

        List<String> collection = new ArrayList<>();
        collection.add("zs");
        collection.add("ls");
        collection.add("wu");

        //   0       1      2
        //   zs     ls     wu
        //
        //collection.add(2, "Java");
        //System.out.println(collection);

        //collection.add(collection.size(), "Python");
        //System.out.println(collection);


    }
}
